//package com.lfd.rabbitmq.service;
//
//import com.lfd.rabbitmq.config.RabbitConfig;
//import com.rabbitmq.client.Channel;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.amqp.core.Message;
//import org.springframework.amqp.rabbit.annotation.RabbitListener;
//import org.springframework.amqp.rabbit.listener.api.ChannelAwareMessageListener;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.data.redis.core.StringRedisTemplate;
//import org.springframework.stereotype.Service;
//
//import java.nio.charset.StandardCharsets;
//import java.util.concurrent.TimeUnit;
//
///**
// * @项目名： spring-emq
// * @包名： com.lfd.rabbitmq.controller
// * @文件名: MessageConsumer
// * @创建者: liufudong@szyh-smart.com
// * @创建时间: 2024/9/30 15:42
// * @描述：
// */
//@Slf4j
//@Service
//public class MessageConsumer implements ChannelAwareMessageListener {
//    @Autowired
//    private StringRedisTemplate redisTemplate;
//
//    @Override
//    @RabbitListener(queues = RabbitConfig.QUEUE_NAME, ackMode = "MANUAL")
//    public void onMessage(Message message, Channel channel) throws Exception {
//        String msgContent = new String(message.getBody(), StandardCharsets.UTF_8);
//
//        // 使用Redis保证消息的幂等性
//        String uniqueKey = "message:received:" + msgContent;  // 根据消息内容生成唯一标识符
//        if (Boolean.TRUE.equals(redisTemplate.opsForValue().setIfAbsent(uniqueKey, "1"))) {
//            log.info("Received message: {}", msgContent);
//            // 处理消息逻辑
//            // TODO: 你的消息处理逻辑
//
//            // 处理完成后可以设置过期时间
//            redisTemplate.expire(uniqueKey, 1, TimeUnit.HOURS);
//
//            // 手动确认消息
//            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
//        } else {
//            log.info("Duplicate message received: {}", msgContent);
//            // 对于重复消息，仍然需要确认
//            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
//        }
//    }
//}
